package com.example.demo.leetcode.classics150;

/**
 * ******************************************************
 *
 * @author liugh9
 * @version 1.0
 * @classname _6轮转数组
 * @description
 * @date 2023/07/06 9:41
 * <p>
 * ******************************************************
 */
public class _6轮转数组 {


    /**
     * 以 n=7，k=3 为例
     * 原始数组                     1 2 3 4 5 6 7
     * 翻转所有元素                  7 6 5 4 3 2 1
     * 翻转 [0,k%n−1] 区间的元素     5 6 7 4 3 2 1
     * 翻转 [k%n,n−1] 区间的元素     5 6 7 1 2 3 4
     *
     * @param nums
     * @param k
     */
    public void rotate(int[] nums, int k) {
        int length = nums.length;
        // 防止k大于长度
        k %= length;

        reverse(nums, 0, length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, length - 1);

    }

    public void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start] = nums[end];
            nums[end] = temp;
            start += 1;
            end -= 1;
        }
    }
}
